/**
 * 现在假设一个场景
 * ajax函数在项目中一直运转良好，跟后台的合作也很愉快。
 * 直到有一天，我们的网站遭受了CSRF攻击。
 * 解决CSRF攻击最简单的一个办法就是在HTTP请求中带上一个Token参数。
 */

// 而我们不能给每一个请求都加上参数，这样不仅浪费时间资源，而且对于之后的维护性造成很大的影响
// 这个时候AOP函数改变传入参数简直就有奇效

Function.prototype.before = function( beforefn ){
    var __self = this;
    return function(){
      beforefn.apply( this, arguments );       // (1)
      return __self.apply( this, arguments );    // (2)
    }
}

var ajax= function( type, url, param ){
    console.log(param);     // 发送ajax请求的代码略
};
var getToken = function(){
    return 'Token';
}

ajax = ajax.before(function( type, url, param ){
    param.Token = getToken();
});

ajax( 'get', 'http://xxx.com/userinfo', { name: 'sven' } );

// 这样我们就用极小的代价去实现了一个比较棘手的问题